actor SniperJoe : WeakArmorClass
{
	Player.ScoreIcon "SNIPMUGS"
	player.startitem "BaseFlagPack", 1
	player.soundclass "sniperjoec"
	Player.ViewHeight 38
	player.displayname "SniperJoe"
	player.jumpz 12
	player.startitem "IsFromMM1"
	player.startitem "JoeBusterBoss"
	player.startitem "JoeMachineGunBoss"
	player.startitem "Base28Ammo", 28
	player.startitem "JoeGrenadeStock", 5
	player.startitem "UltimateAttackItem2", 1
	player.startitem "UltSoundWatcherSpawn2"
	player.startitem "IsJoe"
	States
	{
		Animation1:
		Spawn:
		SNIP A 0
		SNIP B 1 A_JumpIf(z-floorz>0, "Jumping")
		SNIP A 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn+2
		
		See:
		SNIP BBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn
		
		Jumping:
		SNIP I 1 A_JumpIf(z-floorz<=0, "Spawn")
		wait
		
		Missile:
		TNT1 A 0 A_JumpIfInventory("JoeUltTimer",1,"Animation2")
		SNIP FFFFF 1 A_JumpIf(z-floorz>0, "JumpingMissile")
		Missile2:
		SNIP GGGGGGG 1 A_JumpIf(z-floorz>0, "JumpingMissile2")
		Missile3:
		SNIP GGGGGGG 1 A_JumpIf(z-floorz>0, "JumpingMissile3")
		Goto Spawn+1
		
		JumpingMissile:
		SNIP JJJJJ 1 A_JumpIf(z-floorz<=0, "Missile")
		JumpingMissile2:
		SNIP JJJJJJJ 1 A_JumpIf(z-floorz<=0, "Missile2")
		JumpingMissile3:
		SNIP JJJJJJJ 1 A_JumpIf(z-floorz<=0, "Missile2")
		Goto Jumping
		
		Animation2:
		TNT1 A 1
		wait
		
		Animation3:
		SNIP KKK 1 A_JumpIf(z-floorz>0, "JumpingA3")
		Animation3b:
		SNIP LLLLLLLLL 1 A_JumpIf(z-floorz>0, "JumpingA3b")
		goto Spawn+1
		
		JumpingA3:
		SNIP MMM 1 A_JumpIf(z-floorz<=0, "Animation3")
		JumpingA3b:
		SNIP NNNNNNNNN 1 A_JumpIf(z-floorz<=0, "Animation3b")
		goto Jumping
		
		Animation4:
		SNIP OOOOOOOOO 1 A_JumpIf(z-floorz>0, "JumpingA4")
		Goto Spawn+1
		
		JumpingA4:
		SNIP PPPPPPPPP 1 A_JumpIf(z-floorz<=0, "Animation4")
		Goto Jumping
		
		ClassTimeStop:
		SNIP Z 0 SetPlayerProperty(0,1,4)
		SNIP Z 0 ACS_Execute(528,0)
		SNIP AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
		SNIP Z 0 SetPlayerProperty(0,0,4)
		Goto pain+1
		ClassPain:
		//SNIP H 0 A_GiveInventory("JoePainHandler")
		SNIP HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		Goto Spawn+1
		ClassDeath:
		SNIP H 10 ACS_ExecuteAlways(999,0,0)
		SNIP H 0 A_JumpIfInventory("IsUsingAltSkin1",1,"ClassDeath2")
		NOFX A 0 A_SpawnItemEx("JoeDeathFXA",0,0,32)
		NOFX A 1 A_CheckPlayerDone
		wait
		WeaponGetM:
		SNIP H 0 A_JumpIfInTargetInventory("MagnetBeamWepM",1,2)
		SNIP H 0 A_GiveToTarget("WeaponGetter")
		SNIP H 0 A_GiveToTarget("MagnetBeamWepM")
		goto ClassDeath
		
		ClassDeath2:
		NOFX A 0 A_SpawnItemEx("JoeDeathFXB",0,0,32)
		NOFX A 1 A_CheckPlayerDone
		wait
		ClassIceDeath:
		SNIP A 35
		SNIP Z 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
		SNIP Z 1 A_CheckPlayerDone
		wait
	}
}

actor JoeBusterBoss : VCBaseWeapon
{
	Weapon.SlotNumber 1
	Weapon.AmmoUse 1
	Weapon.AmmoGive 28
	Obituary "$OB_SNIPERJOE1"
	Tag "Sniper Joe - Buster"
	inventory.icon "J0ICA0"
	States
	{
		Ready:
		TNT1 A 0 A_GunFlash
		TNT1 A 0 A_JumpIfInventory("JoeEjectFlag",1,"Ready.Wait")
		TNT1 A 0 A_JumpIfInventory("JoeJustExited",1,"Ready.Wait")
		
		Ready2:
		SJOH A 0 A_GiveInventory("JoeReturnHandler",1) //I'm sick and tired of this floating bug...
		SJOH A 0 A_GiveInventory("JoeColorHandler1",1)
		SJOH A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_JoeM2Check")) SJOH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		SJOH A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_JoeM2Check")) SJOH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		SJOH A 0 A_GiveInventory("Base28Ammo",1)
		Goto Ready2
		
		Ready.Wait: //Anti-buffer state
		SJOH AAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_GiveInventory("JoeReturnHandler",1) 
		goto Ready2

		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		SJOH A 1 A_Lower
		loop
		
		Select:
		TNT1 A 0 A_TakeInventory("BaseCustomFlag2") //For canceling out
		TNT1 A 0 A_GiveInventory("BaseCustomFlag1") //the other weapon's shield.
		TNT1 A 0 ACS_ExecuteAlways(991,0,1914)//Just so it plays the wep switch sound lmao
		TNT1 A 0 A_GiveInventory("JoeColorHandler1",1)//ACS_ExecuteAlways(991,0,1914)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		SJOH A 1 A_Raise
		loop
		
		
		Fire:
		TNT1 A 0 A_GiveInventory("StopShield")
		TNT1 A 0 A_GunFlash("Flash3")
		
		Hold:
		SJOH B 0 A_GiveInventory("JoeM1Handler")
		SJOH BCB 2
		SJOH A 10
		SJOH A 0 A_Refire
		SJOH A 0 A_ClearRefire
		SJOH B 0 ACS_NamedExecuteWithResult("VC_SetState",1)
		SJOH B 0 A_GunFlash("Flash")
		goto Ready2
		
		
		Altfire:
		TNT1 A 0 A_GiveInventory("StopShield")
		TNT1 A 0 A_GunFlash("Flash3")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
		SJOH JJK 1
		SJOH J 0 A_Giveinventory("JoeM2Handler",1)
		SJOH LMNOPQ 2
		TNT1 A 6
		SJOH A 2 Offset(0,64)
		SJOH A 2 Offset(0,48)
		SJOH A 2 A_WeaponReady(WRF_NOFIRE)
		SJOH B 0 A_GunFlash("Flash")
		goto Ready2
		
		
		UltimateAttack:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,137)
		TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		TNT1 A 0 A_GunFlash("NoFlash")
		TNT1 A 0 A_GiveInventory("NoPushFlag")
		TNT1 A 1 A_GiveInventory("StopShield")
		TNT1 A 0 A_GiveInventory("InvProtection")
		TNT1 A 0 A_ChangeFlag("INVULNERABLE",1)
		TNT1 A 0 A_TakeInventory("UnSolid",1)
		TNT1 A 0 A_ChangeFlag("SOLID",0)
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		TNT1 A 0 SetPlayerProperty(0,1,0)
		TNT1 A 0 A_Stop
		TNT1 A 0 A_SetGravity(0.0)
		TNT1 A 0 A_SpawnItemEx("JoeWarp",0,0,0,0,0,0,0,1)
		TNT1 A 20 ACS_ExecuteAlways(191,0,APROP_JumpZ,0,1)
		TNT1 A 18 A_GiveInventory("JoeUltHandler") //Dummy time so the game doesn't panic -Fr3ak
		goto Ready
		
		
		Flash:
		"####" "#" 0 A_JumpIf(z-floorz>0, "Flash2")
		"####" "#" 0 A_GiveInventory("JoeShieldHandler1")
		"####" "#" 0 A_JumpIf(z-floorz>0, "Flash2")
		"####" "#" 0 A_GiveInventory("JoeSkinCheck")
		"####" "#" 0 A_JumpIfInventory("IsUsingAltSkin1",1,"Flash.Skin")
		"####" "#" 0 A_JumpIfInventory("IsUsingAltSkin2",1,"Flash.Skin2")
		SJOH G 0
		
		Flash.Loop:
		"####" "#" 1 A_TakeInventory("StopShield")
		"####" "#" 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		goto Flash+2
		
		Flash.Skin: //Change shield frame with alternate skin
		SJOH I 0
		goto Flash.Loop
		Flash.Skin2:
		SJOH R 0 A_GiveInventory("JoeColorHandler1",1)//ACS_ExecuteAlways(998,0,1915,1)
		goto Flash.Loop
		
		Flash2: //Jumping
		SJO2 "#" 0 A_GiveInventory("StopShield")
		SJO2 "#" 0 A_GiveInventory("JoeSkinCheck")
		SJO2 "#" 1 A_JumpIf(z-floorz<=0, "Flash")
		SJO2 "#" 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		loop
		
		Flash3: //Attacking
		SJO2 "#" 1 A_GiveInventory("JoeSkinCheck")
		SJO2 "#" 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		loop
	}
}

actor JoeMachineGunBoss : JoeBusterBoss
{
	Weapon.SlotNumber 2
	Obituary "$OB_SNIPERJOE2"
	Tag "Sniper Joe - Machine Gun"
	inventory.icon "J0ICB0"
	States
	{
		
		Ready:
		TNT1 A 0 A_GunFlash
		TNT1 A 0 A_JumpIfInventory("JoeEjectFlag",1,"Ready.Wait")
		TNT1 A 0 A_JumpIfInventory("JoeJustExited",1,"Ready.Wait")
		
		Ready2:
		SJOH D 0 A_GiveInventory("JoeColorHandler2",1)
		SJOH D 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
		ReadyReal:
		"####" D 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,1)|WRF_NOSECONDARY*CallACS("VC_JoeM2Check")) "####" D 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" D 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,1)|WRF_NOSECONDARY*CallACS("VC_JoeM2Check")) "####" D 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" D 0 A_GiveInventory("Base28Ammo",1)
		Goto Ready2
		
		Ready.Wait: //Anti-buffer state
		SJOH DDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_GiveInventory("JoeReturnHandler",1) 
		goto Ready2

		AltSkinFrame2:
		S_OH A 0
		goto ReadyReal
		
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		SJOH D 1 A_Lower
		loop
		
		Select:
		TNT1 A 0 A_TakeInventory("BaseCustomFlag1")
		TNT1 A 0 A_GiveInventory("BaseCustomFlag2")
		TNT1 A 0 ACS_ExecuteAlways(991,0,77)
		TNT1 A 0 A_GiveInventory("JoeColorHandler2")
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		SJOH D 1 A_Raise
		loop
		
		
		Fire:
		"####" A 0 A_GiveInventory("StopShield")
		"####" A 0 A_GunFlash("Flash3")
		
		Hold:
		"####" E 0 A_JumpIfNoAmmo("Fire.NoAmmo")
		"####" B 0 A_GiveInventory("JoeM1Handler2")
		"####" E 1 Offset(4,30)
		"####" F 1 Offset(-3,33)
		"####" D 1 Offset(2,31)
		"####" D 2 A_WeaponReady(WRF_NOFIRE)
		"####" D 0 A_Refire
		
		Fire.Stop:
		"####" E 0 A_ClearRefire
		"####" E 0 ACS_NamedExecuteWithResult("VC_SetState",1)
		"####" E 0 A_GunFlash("Flash")
		goto Ready2
		
		Fire.NoAmmo:
		"####" B 0 A_GiveInventory("JoeM1Handler2")
		"####" E 1 Offset(4,30)
		"####" F 1 Offset(-3,33)
		"####" D 1 Offset(2,31)
		"####" D 4 A_WeaponReady(WRF_NOFIRE)
		"####" D 0 A_Refire("Fire.NoAmmo")
		goto Fire.Stop
		
		
		Altfire:
		TNT1 A 0 A_GiveInventory("StopShield")
		TNT1 A 0 A_GunFlash("Flash3")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
		SJOH JJK 1
		SJOH J 0 A_Giveinventory("JoeM2Handler",1)
		SJOH LMNOPQ 2
		TNT1 A 6
		SJOH D 2 Offset(0,64)
		SJOH D 2 Offset(0,48)
		SJOH D 2 A_WeaponReady(WRF_NOFIRE)
		SJOH B 0 A_GunFlash("Flash")
		goto Ready2
		
		
		Flash:
		"####" "#" 0 A_JumpIf(z-floorz>0, "Flash2")
		"####" "#" 0 A_GiveInventory("JoeShieldHandler2")
		"####" "#" 0 A_JumpIf(z-floorz>0, "Flash2")
		"####" "#" 0 A_GiveInventory("JoeSkinCheck")
		SJOH H 0 A_JumpIfInventory("IsUsingAltSkin2",1,"Flash.Skin2")
		SJOH H 0
		Flash.Loop:
		"####" "#" 1 A_TakeInventory("StopShield")
		"####" "#" 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		goto Flash+2
		
		Flash.Skin2:
		SJOH S 0 //A_GiveInventory("JoeColorHandler1",1)//ACS_ExecuteAlways(998,0,1915,1)
		goto Flash.Loop
	}
}

actor JoeSkinCheck : SkinChecker
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(CallACS("GC_GetSkinNum")==258,"AltSkin1")
TNT1 A 0 A_JumpIf(CallACS("GC_GetSkinNum")==270,"AltSkin2")
goto NormalSkin
}
}

Actor JoeGrenadeStock : Inventory
{
inventory.amount 1
inventory.maxamount 8
}

Actor JoeM2Cooldown : Inventory
{
inventory.amount 1
inventory.maxamount 350
}

actor JoeDeathFXA : BasicClientSide
{
States
{
Spawn:
TNT1 A 0
MX01 B 0 A_PlaySoundEx("weapon/mm2pain","Body")
MX01 BCDE 2
stop
}
}

actor JoeDeathFXB : BasicClientSide
{
States
{
Spawn:
TNT1 A 0
MX01 E 0 A_PlaySoundEx("weapon/mm1pain","Body")
MX01 EBCD 2
stop
}
}

actor JoeShieldHandler1 : CustomInventory
{
states
{
Pickup:
//TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
TNT1 A 0 A_SpawnItemEx("JoeShieldHitbox1",28,0,8,0,0,0,0,SXF_TRANSFERTRANSLATION)
stop
//AltSkinFrame2:
//TNT1 A 0 A_SpawnItemEx("JoeShieldHitboxMM2",28,0,8)
//stop
}
}

actor JoeShieldHandler2 : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
Shield:
TNT1 A 0 A_SpawnItemEx("JoeShieldHitbox2",28,0,8,0,0,0,0,SXF_TRANSFERTRANSLATION)
stop
AltSkinFrame2:
TNT1 A 0 ACS_ExecuteAlways(991,0,10888)
goto Shield
}
}

actor JoeShieldHitbox1 : BasicShieldHitbox
{
translation "198:198=108:108"
damagefactor "FireTrap", 0.0
damagefactor "FirePillar", 0.0
damagefactor "Beam", 0.0
Meleerange 28
Accuracy 0
Mass 8
radius 14
height 56
renderstyle "Normal"
scale 2.5
species "JoeShieldType"
States
{
Spawn:
TNT1 A 0
J0SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"Spawn2")
J0SX A 1 A_Warp(2,Meleerange,Accuracy,Mass,0,24)
J0SX A 0 //A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
J0SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"Spawn2")
J0SX A 1 A_Warp(2,Meleerange,Accuracy,Mass,0,24)
J0SX A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
J0SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"SpawnStop")
J0SX A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"Spawn2")
//J0SX A 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"MM2Color")
J0SX A 0 A_GiveInventory("JoeColorHandlerShieldSide",1)
goto Spawn+11
Spawn2:
J1SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("IsUsingNormalSkin",1,"Spawn")
J1SX A 1 A_Warp(2,Meleerange,Accuracy,Mass,0,24)
J1SX A 0 //A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
J1SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("IsUsingNormalSkin",1,"Spawn")
J1SX A 1 A_Warp(2,Meleerange,Accuracy,Mass,0,24)
J1SX A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
J1SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"SpawnStop")
J1SX A 0 A_JumpIfInTargetInventory("IsUsingNormalSkin",1,"Spawn")
J0SX A 0 A_GiveInventory("JoeColorHandlerShieldSide",1)
goto Spawn2+10
MM2Color:
J0SX A 0 Thing_SetTranslation(0,1915)
goto Spawn+11
Pain:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"Pain2")
TNT1 A 0 A_SpawnItemEx("JoeShieldDeathFX")
TNT1 A 0 A_PlaySound("mm9/reflect")
goto Spawn
Pain2:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("JoeShieldDeathFX2")
TNT1 A 0 A_PlaySound("mm1/reflect")
goto Spawn
Death:
SpawnStop:
TNT1 A 0
stop
}
}

actor JoeShieldHitbox2 : JoeShieldHitbox1
{
translation "198:198=42:42"
States
{
Spawn:
TNT1 A 0
J2SX A 0 A_GiveInventory("JoeColorHandler2ShieldSide",1)
J2SX A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"SpawnStop")
J2SX A 0 A_JumpIfInTargetInventory("StopShield",1,"SpawnStop")
J2SX A 0 A_JumpIfInTargetInventory("BaseCustomFlag1",1,"SpawnStop")
J2SX A 1 A_Warp(2,Meleerange,Accuracy,Mass,0,24)
J2SX A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
loop
Pain:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("JoeShieldDeathFX2")
TNT1 A 0 A_PlaySound("mm9/reflect")
goto Spawn
}
}

actor JoeShieldHitbox1L : JoeShieldHitbox1{translation "198:198=108:108"}
actor JoeShieldHitbox1W : JoeShieldHitbox1{translation "198:198=108:108"}
actor JoeShieldHitbox1C : JoeShieldHitbox1{translation "198:198=108:108"}
actor JoeShieldHitbox1K : JoeShieldHitbox1{translation "198:198=108:108"}
actor JoeShieldHitbox2L : JoeShieldHitbox2{translation "198:198=108:108"}
actor JoeShieldHitbox2W : JoeShieldHitbox2{translation "198:198=108:108"}
actor JoeShieldHitbox2C : JoeShieldHitbox2{translation "198:198=108:108"}
actor JoeShieldHitbox2K : JoeShieldHitbox2{translation "198:198=108:108"}

//actor JoeShieldHitboxMM2 : JoeShieldHitbox1{translation "198:198=225:225"}

actor JoeShieldDeathFX : KnightShieldDeathFX
{
states
{
Spawn:
J0SX B 0 A_SetScale(scaleX + 0.1, 2.5) 
J0SX B 1 A_FadeOut(0.05)
loop
}
}

actor JoeShieldDeathFX2 : JoeShieldDeathFX
{
states
{
Spawn:
J1SX B 0 A_SetScale(scaleX + 0.1, 2.5) 
J1SX B 1 A_FadeOut(0.05)
loop
}
}

actor JoeBullet
{
Obituary "$OB_SNIPERJOE1"
PROJECTILE
DamageType "JoeBuster"
species "JoeShieldType"
+THRUSPECIES
Speed 45//&Ze
Damage (13)
Radius 8
Height 8
Scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
6ULT X 1
6ULT X 1 A_ChangeFlag("THRUSPECIES",0)
wait
Death:
TNT1 A 0
stop
}
}

actor JoeBullet3 : JoeBullet
{
Obituary "$OB_SNIPERJOE1C"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
J0SX C 1
J0SX C 1 A_ChangeFlag("THRUSPECIES",0)
wait
}
}

actor JoeGrenade
{
Obituary "$OB_SNIPERJOE3"
PROJECTILE
DamageType "JoeGrenade"
species "JoeShieldType"
+THRUSPECIES
-NOGRAVITY
+BOUNCEONACTORS
+BOUNCEONCEILINGS
+HEXENBOUNCE
+NOTARGETSWITCH
+DONTREFLECT
wallbouncefactor 1.0
bouncefactor 0.7
bouncecount 4
Speed 23
Damage (0)//(12)
Radius 12
Height 12
Scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 ThrustThingZ(0,30,0,1)
J0GX AABBCCDDEE 1
Goto Spawn+3
Death:
J0GX A 0 A_SpawnItemEx("JoeGrenade2")
stop
XDeath:
TNT1 A 0 A_SpawnItemEx("JoeGrenadeBoom")
stop
}
}

actor JoeGrenadeBoom : BasicExplosion
{
Obituary "$OB_SNIPERJOE3"
DamageType "JoeGrenade"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_PlaySoundEx("weapon/hyperbomb","Body")
TNT1 A 0 A_PlaySoundEx("weapon/napalm","Auto")
TNT1 A 0 A_SpawnItemEx("RemoteMineRMExplosionFX",0,0,0,0,0,0,0,1)
TNT1 A 0 A_PlaySoundEx("weapon/flashbomb2", "Weapon")
TNT1 A 0 A_Quake(3,80,0,600)
TNT1 AAAAAAA 0 A_SpawnItemEx("KaizockBreakBit",random(0,16),random(0,16),random(0,56),random(-30,30),random(-30,30),random(5,15),random(0,360))
TNT1 A 0 A_PlaySoundEx("weapon/centaurflash","Body")
TNT1 A 0 A_PlaySoundEx("weapon/icewavebreak", "Weapon")

TNT1 A 0 A_PlaySoundEX("weapon/hardquake","Weapon")
TNT1 A 0 A_SpawnItemEx("QuakeFX3")
TNT1 A 0 A_SpawnItemEx("QuakeFX2")
TNT1 A 0 A_SpawnItemEx("QuakeFX")
TNT1 AAAAAAAAAA 0 A_SpawnItemEx("HardQuakeDebris",random(32,256),0,0,0,0,random(5,12),random(0,360))
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("MM8DeathFX",random(0,180),0,random(0,90),0,0,0,random(0,359),1)
TNT1 A 2 A_Explode(36,180,0,0,64)
stop
}
}

actor JoeGrenade2 : JoeGrenade
{
-DOOMBOUNCE
+NOEXPLODEFLOOR
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
J0GX ABCDEABCDEABCDE 2 A_ChangeVelocity(0,0,momz,CVF_REPLACE)
Death:
goto XDeath
}
}

actor JoeM1Handler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin1",1,"Pickup2")
TNT1 A 0 A_PlaySoundEx("misc/devilfire","Weapon")
TNT1 A 0 A_FireCustomMissile("JoeBullet",0,0,1,4)
stop

Pickup2:
TNT1 A 0 A_PlaySoundEx("weapon/joebuster","Weapon")
TNT1 A 0 A_FireCustomMissile("JoeBullet3",0,0,1,4)
stop
}
}

actor JoeM1Handler2 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame")
TNT1 A 0 A_FireCustomMissile("JoeBullet2",0,1,1,4)
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin1",1,"Pickup2")
TNT1 A 0 A_PlaySoundEx("misc/devilfire","Weapon")
stop

Pickup2:
TNT1 A 0 A_PlaySoundEx("weapon/joebuster","Weapon")
stop

AltSkinFrame:
TNT1 A 0 A_FireCustomMissile("JoeBullet2Returning",0,1,1,4)
goto Pickup+3
}
}

actor JoePainHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin1",1,"Pickup2")
TNT1 A 0 A_PlaySoundEx("weapon/mm2pain","Voice")
stop

Pickup2:
TNT1 A 0 A_PlaySoundEx("weapon/mm1pain","Voice")
stop
}
}

actor JoeBullet2 : JoeBullet
{
Obituary "$OB_SNIPERJOE2"
Speed 45
Damage (4)
Radius 6
Height 6
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
J0SX D 1
J0SX D 1 A_ChangeFlag("THRUSPECIES",0)
wait
Death:
TNT1 A 0
stop
}
}

actor JoeM2Handler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("misc/itemthrow","Weapon")
TNT1 A 0 A_FireCustomMissile("JoeGrenade",0,0,0,4)
TNT1 A 0 A_GiveInventory("JoeM2Cooldown",350)
TNT1 A 0 A_TakeInventory("JoeGrenadeStock",1)
TNT1 A 0 A_SpawnItemEx("JoeM2Watcher")
stop
}
}

actor JoeM2Watcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 AA 0
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 1 A_TakeFromTarget("JoeM2Cooldown",1)
TNT1 A 0 A_JumpIfInTargetInventory("JoeM2Cooldown",1,"Spawn")
Death:
TNT1 A 1
stop
}
}

actor JoeKillHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("MirrorBusterBoss",1,"Nope")
TNT1 A 0 A_PlaySoundEx("weapon/joekill","Auto")
TNT1 A 0 A_GiveInventory("JoeGrenadeStock",3)
stop

Nope:
TNT1 A 0
stop
}
}

actor JoeHitHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("JoeM2Cooldown",350)
stop
}
}

actor JoeVehicleWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
reactiontime 200
States
{
Spawn:
TNT1 A 0
TNT1 AAAAAAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 0 A_TakeFromTarget("MediumShortUltimateAmmo",1)
TNT1 A 0 A_Countdown
TNT1 A 0 A_JumpIfInTargetInventory("JoeEjectFlag",1,"Death")
loop
Death:
TNT1 A 1
stop
}
}

actor JoeUltHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("Once") //Erase the menu if you spectate
TNT1 A 0 A_GiveInventory("BasicHealthRecord",CallACS("VC_HealthCheck"))
TNT1 A 0 A_SpawnItemEx("JoeUltWatcher")
TNT1 A 0 A_GiveInventory("JoeUltTimer",525)
TNT1 A 0 A_GiveInventory("JoeMenu2")
TNT1 A 0 A_GiveInventory("JoeMenu3")
TNT1 A 0 A_GiveInventory("JoeMenu4")
TNT1 A 0 A_GiveInventory("JoeMenu5")
TNT1 A 0 A_GiveInventory("JoeMenu1")
TNT1 A 0 A_SelectWeapon("JoeMenu1")
TNT1 A 0 A_TakeInventory("JoeBusterBoss")
TNT1 A 0 A_TakeInventory("JoeMachineGunBoss")
stop
}
}

actor JoeMenu1 : VCBaseWeapon
{
	Weapon.SlotNumber 1
	Weapon.AmmoUse 1
	Obituary "$OB_SNIPERJOE1"
	Tag "$TAG_JOEMENU1"
	States
	{
		Ready:
		TNT1 A 0 A_JumpIfInventory("JoeUltTimer",1,2)
		TNT1 A 0 A_Jump(256,"Fire")
		TNT1 A 1 A_WeaponReady
		loop

		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		TNT1 A 1 A_Lower
		Loop
		
		Select:
		TNT1 A 0 A_JumpIfInventory("WeaponCharge",1,2)
		TNT1 A 0 ACS_NamedExecuteAlways("VC_JoeMenu",0,6)
		TNT1 A 0 A_GiveInventory("WeaponCharge")
		TNT1 A 0 ACS_NamedExecuteAlways("VC_JoeMenu",0,1)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		goto Ready
		
		Fire:
		TNT1 A 0 A_TakeInventory("WeaponCharge")
		TNT1 A 35 ACS_NamedExecuteAlways("VC_JoeMenu",0,7)
		TNT1 A 1 A_TakeInventory("Once")
		TNT1 A 0 A_Jump(256,"Fire2")
		
		Fire2:
		TNT1 A 5 ACS_NamedExecuteWithResult("VC_JoeUlt",0)
		goto Ready2
		
		Flash2: //To fix a random desync
		Flash3:
		TNT1 A 0
		stop
	}
}

actor JoeMenu2 : JoeMenu1
{
	Weapon.SlotNumber 2
	Tag "$TAG_JOEMENU2"
	States
	{
		Select:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_JoeMenu",0,2)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		goto Ready
		
		Fire2:
		TNT1 A 5 ACS_NamedExecuteWithResult("VC_JoeUlt",1)
		goto Ready2
	}
}

actor JoeMenu3 : JoeMenu1
{
	Weapon.SlotNumber 3
	Tag "$TAG_JOEMENU3"
	States
	{
		Select:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_JoeMenu",0,3)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		goto Ready
		
		Fire2:
		TNT1 A 5 ACS_NamedExecuteWithResult("VC_JoeUlt",2)
		goto Ready2
	}
}

actor JoeMenu4 : JoeMenu1
{
	Weapon.SlotNumber 4
	Tag "$TAG_JOEMENU4"
	States
	{
		Select:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_JoeMenu",0,4)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		goto Ready
		
		Fire2:
		TNT1 A 5 ACS_NamedExecuteWithResult("VC_JoeUlt",3)
		goto Ready2
	}
}

actor JoeMenu5 : JoeMenu1
{
	Weapon.SlotNumber 5
	Tag "$TAG_JOEMENU5"
	States
	{
		Select:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_JoeMenu",0,5)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		goto Ready
		
		Fire2:
		TNT1 A 5 ACS_NamedExecuteWithResult("VC_JoeUlt",4)
		goto Ready2
	}
}

Actor JoeUltTimer : Inventory
{
inventory.amount 1
inventory.maxamount 525
}

actor JoeUltWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 AA 0
TNT1 A 0 A_GiveToTarget("StopShield")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"Death3")
TNT1 A 1 A_TakeFromTarget("JoeUltTimer",1)
TNT1 A 0 A_JumpIfInTargetInventory("JoeUltTimer",1,"Spawn")
TNT1 A 0 A_GiveToTarget("StopShield")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"Death3")
TNT1 A 1 A_TakeFromTarget("JoeUltTimer",1)
TNT1 A 0 A_JumpIfInTargetInventory("JoeUltTimer",1,"Spawn")
Death2:
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
Death:
TNT1 A 0 A_TakeFromTarget("JoeUltTimer",525)
TNT1 AAAAAAAA 1 A_TakeFromTarget("Once")
Death3:
TNT1 A 0
stop
}
}

actor JoeWarp : BasicClientSide
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_PlaySoundEx("misc/portin","Body")
TFOG BAACC 1
TFOG A 105 ThrustThingZ(0,80,0,0)
stop
}
}

actor JoeEjectHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ChangeCamera(0,0,0)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
TNT1 A 0 A_TakeInventory("InvProtection")
TNT1 A 0 A_StopSound(CHAN_5)
TNT1 A 0 A_GiveInventory("ShadowVisible",1)
TNT1 A 0 A_JumpIfInventory("JoeEjectYes",1,"Pickup2")
TNT1 A 0 A_ChangeVelocity(12,0,12,CVF_RELATIVE|CVF_REPLACE)
stop

Pickup2:
TNT1 A 0 A_ChangeVelocity(20,0,20,CVF_RELATIVE|CVF_REPLACE)
stop
}
}

Actor IsJoe : Once{}




Actor JoeColorHandler1 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("JoeSkinCheck",1)
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
Shield:
TNT1 A 0 ACS_ExecuteAlways(991,0,1914,1)
stop

AltSkinFrame2:
TNT1 A 0 ACS_ExecuteAlways(991,0,1915,1)
stop
}
}

Actor JoeColorHandler2 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("JoeSkinCheck",1)
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
Shield:
TNT1 A 0 ACS_ExecuteAlways(991,0,77,1)
stop

AltSkinFrame2:
TNT1 A 0 ACS_ExecuteAlways(991,0,10888,1)
stop
}
}

Actor JoeColorHandlerShieldSide : JoeColorHandler1
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("JoeSkinCheck",1)
TNT1 A 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
goto Shield
}
}

Actor JoeColorHandler2ShieldSide : JoeColorHandler2
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("JoeSkinCheck",1)
TNT1 A 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
goto Shield
}
}

actor JoeBullet2Returning : JoeBullet2
{
Obituary "$OB_SNIPERJOE2R"
Translation "42:42=58:58"
}

actor JoeReturnHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ACS_ExecuteAlways(191,0,APROP_JumpZ,12,1)
TNT1 A 0 A_GiveInventory("GravityRestore",1)
TNT1 A 0 A_TakeInventory("InvProtection")
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
TNT1 A 0 A_TakeInventory("JoeJustExited")
stop
}
}